/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.Pregunta360;
import co.com.sed.model.beans.TipoEvaluacion;
import co.com.sed.model.util.Util;

/**
 * @author derain gamez brito
 *
 */
public class Pregunta360Peer {
	
	
	private static final String BUSCAR_PREGUNTAS360 =
			"SELECT id_pregunta_360, fecha_asig, estado, evaluado, periodo_evaluado "+
			"FROM cargo ";
	
	private static final String BUSCAR_PREGUNTA360 =
			"SELECT id_pregunta_360, pregunta, id_t_evaluacion "+
			"FROM pregunta_360 "+
			"WHERE id_pregunta_360 = &id_pregunta_360";

	private static final String BUSCAR_PREGUNTA360_POR_TIPOEVALUACION =
		"SELECT id_pregunta_360, pregunta, id_t_evaluacion"+
		"FROM pregunta_360 "+
		"WHERE id_t_evaluacion = &id_t_evaluacion";

	
	private static final String INSERTAR_PREGUNTA360 =
			"INSERT INTO pregunta_360 (pregunta, id_t_evaluacion) VALUES "+
			"('&pregunta',&id_t_evaluacion)";

	private static final String ACTUALIZAR_PREGUNTA360 =
			"UPDATE pregunta_360 "+
			"SET fecha_asig = '&fecha_asig', estado = &estado, evaluado = &evaluado, periodo_evaluado=&periodo_evaluado"+ 
			"WHERE id_pregunta_360 = &id_pregunta_360";

	private static final String ELIMINAR_PREGUNTA360 =
			"DELETE FROM pregunta_360 "+
			"WHERE id_pregunta_360 = &id_pregunta_360";

	/** busca en la base de datos todos los registros de la tabla "pregunta360"
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	 * 
	 * @return					lista de cargos
	 * @see         				Cargo, Statement
	 */
	public static ArrayList<Pregunta360> buscarPreguntas360(Statement stmt) {
		ArrayList<Pregunta360> Preguntas360 = new ArrayList<Pregunta360>();
		
		String sql = BUSCAR_PREGUNTAS360;
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Pregunta360 pre = new Pregunta360();
					
					pre.setIdPregunta360(rs.getInt("id_pregunta_360"));
					pre.setTipoEvaluacion(new TipoEvaluacion (rs.getInt("id_t_evaluacion")));
								
					Preguntas360.add(pre);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}
		
		return Preguntas360;
	}


	/** busca en la base de datos un registro de la tabla "pregunta360"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* @param pregunta360				id de la pregunta360 que se desea cosultar
	* 
	* @return					pregunta360 buscado
	* @see         				Pregunta360, Statement
	*/
	public static Pregunta360 buscarPregunta360(Statement stmt, int idPregunta360) {
		Pregunta360 pre = new Pregunta360();
		
		String sql = BUSCAR_PREGUNTA360;
		
		// se setean los "parametros" &id_pregunta_360, '&pregunta', &id_t_evaluacion
		sql = sql.replaceAll("&id_pregunta_360", String.valueOf (idPregunta360));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					pre.setIdPregunta360(rs.getInt("id_pregunta_360"));
					pre.setTipoEvaluacion(new TipoEvaluacion (rs.getInt("id_t_evalauacion")));
							
					
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}
		
		return pre;
	}
	
	/** busca en la base de datos todos los registros de la tabla "Pregunta360" que pertenescan a un TIPOEVALUACION
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de Pregunta360
	* @see         				Pregunta360, Statement
	*/
	public static ArrayList<Pregunta360> buscarPregunta360PorTipoEvaluacion(Statement stmt, int idTipoEvaluacion) {
		ArrayList<Pregunta360> preguntaS360 = new ArrayList<Pregunta360>();

		String sql = BUSCAR_PREGUNTA360_POR_TIPOEVALUACION;

		// se setean los "parametros"
		sql = sql.replaceAll("&id_t_evaluacion", "" + idTipoEvaluacion);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Pregunta360 p360 = new Pregunta360();
					
					p360.setIdPregunta360(rs.getInt("id_pregunta_360"));
					p360.setPregunta(rs.getString("pregunta"));
					p360.setTipoEvaluacion(new TipoEvaluacion(rs.getInt("id_t_evaluacion")));
											
					preguntaS360.add(p360);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return preguntaS360;
	}


	/** Inserta un Tipo de pregunta360 en la base de datos
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	* @param pregunta360		pregunta360 que se va a insertar en la base de datos
	* 
	* @return					void
	* @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	* 
	* @see         			DataManager
	*/
	public static int insertarPregunta360(Statement stmt, Pregunta360 pregunta360) throws SQLException {
		int idNuevaPregunta360 = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_PREGUNTA360;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&pregunta", pregunta360.getPregunta())	
					 .replaceAll("&id_t_evaluacion", ""+ pregunta360.getTipoEvaluacion().getIdTipoEvaluacion());
			
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaPregunta360 = rs.getInt("id_pregunta_360");
				Util.print("nuevo registro: " + idNuevaPregunta360);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaPregunta360;
	}
		
	
	/** Actualiza un pregunta360 en la base de datos
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	* @param pregunta360		evaluacion360 que se va a actualizar en la base de datos
	* 
	* @return					void
	* @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	* 
	* @see         			DataManager
	*/
	public static void actualizarPregunta360(Statement stmt, Pregunta360 pregunta360) throws SQLException {
		String sql = ACTUALIZAR_PREGUNTA360;
		// se setean los "parametros": &id_evaluacion_360, &fecha_asig, &estado, &identificacion, &periodo_evaluado
		sql = sql.replaceAll("&id_pregunta_360", ""+ pregunta360.getIdPregunta360())
		 		.replaceAll("&pregunta", ""+ pregunta360.getPregunta())	
		 		.replaceAll("&id_t_evaluacion", ""+ pregunta360.getTipoEvaluacion().getIdTipoEvaluacion());
	
		stmt.executeUpdate(sql);
	}
	
	/** Elimina un Cargo en la base de datos
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	* @param Pregunta360		Pregunta360 que se va a eliminar en la base de datos
	* 
	* @return					void
	* @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	* 
	* @see         			DataManager
	*/
	public static void eliminarPregunta360(Statement stmt, Pregunta360 pregunta360) throws SQLException {
	String sql = ELIMINAR_PREGUNTA360;
	// se setean los "parametros": &id_evaluacion_360
	sql = sql.replaceAll("&id_pregunta_360", "" + pregunta360.getIdPregunta360());
	
	stmt.executeUpdate(sql);
	}

}
